树(Tree)是一种非线性的层级数据结构,它模拟了现实世界中的组织架构(如文件系统或家谱)。不同于列表、栈和队列的线性排列,树的本质在于其层级性 (Hierarchical)与递归性 (Recursive)。
1. 解剖树的形态
- 节点 (Node): 包含键(Key)和有效载荷的基础单元。
- 根节点 (Root): 唯一没有入边的节点,是树的起点。
- 边 (Edge): 连接节点的唯一路径,代表父子关系。
- 叶子节点 (Leaf): 没有子节点的末端,是递归终止的自然边界。
2. 递归定义的双重视角
我们可以从两种视角理解树:
图形学视角
由节点和边构成的无环、连通图,每个节点(除根外)有且仅有一个父节点。
由节点和边构成的无环、连通图,每个节点(除根外)有且仅有一个父节点。
递归视角
一棵树要么为空,要么由一个根节点及零个或多个子树(Subtree)组成。
一棵树要么为空,要么由一个根节点及零个或多个子树(Subtree)组成。
HTML DOM 树示例
在 HTML 中,
<html> 是根,<body> 和 <head> 是兄弟节点。每一个标签及其嵌套内容共同构成一棵子树。这种结构使得我们可以整体移动 <ul> 及其所有 <li> 而不破坏其内部层级。